<?php
/**
 * +----------------------------------------------------------
 * @autor: luotao	职责链模式
 * 村民处理一个问题,只需要提交给村长即可,村长处理不了,
 * 会自动提交给上一级,直到处理完毕.
 * +----------------------------------------------------------
 * @Date : 2016/11/21 20:59
 * +----------------------------------------------------------
 */

//村长
class VillageHead {

	//能力级别
	protected $ability = '1';

	//上级名称
	protected $superior = Alcalde::class;

	//处理问题
	public function Handle ($array = []) {
		if($array['ability'] <= $this->ability) {
			echo 'VillageHead（村长）:我的权限可以处理这件事，处理！<br/>';
		} else {
			echo 'VillageHead（村长）:我的权限不能处理这件事，请求镇长处理！<br/>';
            /** @var Alcalde $superior */
            $superior = new $this->superior;
			$superior->Handle($array);
		}
	}
}

//镇长
class Alcalde {

	//能力级别
	protected $ability = '2';

	//上级名称
	protected $superior = CountyMagistrate::class;

	//处理问题
	public function Handle ($array = []) {
		if($array['ability'] <= $this->ability) {
			echo 'Alcalde（镇长）:我的权限可以处理这件事，处理！<br/>';
		} else {
			echo 'Alcalde（镇长）:我的权限不能处理这件事，请求县长处理！<br/>';
			$superior = new $this->superior;
            /** @var CountyMagistrate $superior */
            $superior->Handle($array);
		}
	}
}

//县长
class CountyMagistrate {

	//能力级别
	protected $ability = '3';

	//上级名称
	protected $superior = 'CountyMagistrate';

	//处理问题
	public function Handle ($array = []) {
		if($array['ability'] <= $this->ability) {
			echo 'CountyMagistrate(县长):我的权限可以处理这件事，处理！';
		} else {
			$superior = new $this->superior;
			$superior->Handle($array);
		}
	}
}


$obj = new VillageHead();
$arr = ['ability'=>1];
echo '承包鱼塘！：<br/>';
$obj->Handle($arr);
echo '申请地契！：<br/>';
$arr = ['ability'=>3];
$obj->Handle($arr);